package logica.veiculo;

import java.util.Iterator;
import java.util.List;

import logica.pessoa.Filial;
import logica.util.Data;

public class Motocicleta extends Veiculo {
	
	private Freio tipoDeFreio;
	private int cilindradas;
	
	public int getCilindradas() {
		return cilindradas;
	}

	public void setCilindradas(int cilindradas) {
		this.cilindradas = cilindradas;
	}

	/**
	 * Constroi um objeto do tipo motocicleta.
	 * @param RENAVAM String - O numero RENAVAM da motocicleta
	 * @param modelo String - O modelo da motocicleta
	 * @param marca String - A marca da motocicleta
	 * @param ano int - O ano de fabricacao da motocicleta
	 * @param potencia int - O valor da potencia da motocicleta
	 * @param tipoDePotencia Potencia - O tipo de potencia da motocicleta
	 * @param cor Cor - A cor da motocicleta
	 * @param tipoDeCombustivel Combustivel - O tipo de combustivel utilizado pela motocicleta
	 * @param dataDeAquisicao Data - A data de aquisicao da motocicleta pela locadora
	 * @param filial Filial - A filial onde esta a motocicleta
	 * @param acessorios Acessorio - Os acessorios que a motocicleta possui
	 * @param estado Estado - O estado da motocicleta para a locadora
	 * @param placa String - A placa da motocicleta
	 * @param tipoDeFreio Freio - O tipo de freio da motocicleta
	 * @param nivelDoTanque int - O nivel do tanque da motocicleta
	 * @param cilindradas - int 
	 * @throws Exception Se o RENAVAM, o modelo, a marca ou a placa forem nulos ou vazios ou se o RENAVAM contiver algum caractere nao-numerico ou se a lista de acessorios for vazia ou se o valor da potencia ou do ano forem menores ou iguais a 0.
	 */
	
	public Motocicleta(String RENAVAM, String modelo, String marca, int ano,
			int potencia, Potencia tipoDePotencia, Cor cor, Combustivel tipoDeCombustivel,
			Data dataDeAquisicao, Filial filial, List<Acessorio> acessorios, Estado estado,
			String placa, Freio tipoDeFreio, int nivelDoTanque, int cilindradas) throws Exception {
		
		super(RENAVAM, modelo, marca, ano, potencia, tipoDePotencia, cor, tipoDeCombustivel,
			dataDeAquisicao, filial, acessorios, estado, placa, nivelDoTanque);
		
		this.tipoDeFreio = tipoDeFreio;
		
		if(cilindradas > 0){
			this.cilindradas = cilindradas;
		}
		else{
			throw new Exception("cilindrada invalida");
		}
		
	
	}

	public Freio getTipoDeFreio() {
		return tipoDeFreio;
	}

	public void setTipoDeFreio(Freio tipoDeFreio) {
		this.tipoDeFreio = tipoDeFreio;
	}

	@Override
	/**
	 * @author Pedro Rawan Meireles Limeira
	 */
	public String toString() {
		
		String acessoriosString="";
		Iterator<Acessorio> iterador = this.getAcessorios().iterator();
		//Cria uma string com todos os acessorios
		while(iterador.hasNext()){
			acessoriosString+=iterador.next()+" ";
		}
		
		return "\nMotocicleta"+" "+this.getRenavam()+"\n"+
		"________________________"+"\n"+
		"\nModelo: "+this.getModelo()+"\t"+"Marca: "+this.getMarca()+"\t"+"Placa: "+this.getPlaca()+"\t"+"Ano: "+this.getAno()+"\n"+
		"Potencia: "+this.getPotencia()+" "+this.getTipoDePotencia()+"\n"+
		"Cor: "+this.getCor()+"\t"+"Acessorios: "+acessoriosString+"\t"+"\t"+"Tipo de freio: "+this.getTipoDeFreio()+"\n"+
		"Data: "+this.getDataDeAquisicao()+"\t"+"Estado: "+this.getEstado()+"\t"+"Nivel do Tanque: "+this.getNivelDoTanque()+"\n"+
		"Filial: "+this.getFilial()+"\n"+
		"_________________________"
		;
	}
	
}